package park.model.role;
import java.io.Serializable;
import java.sql.Date;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;

import park.model.party.PessoaFisica;
/**
 * @archetype role
 * @author gilberto
 * @since 22/04/2009
 */
public class Funcionario implements Serializable {
	private static final long serialVersionUID = 1L;
	
	/*
	 * References PessoaFisica class. 
	 * Note: 
	 * 	- the real state of this realacionship is cdPessoaFisica;
	 *  - the lookup data is pessoaFisica 
	 */
	private Integer cdPessoaFisica;
	private transient PessoaFisica pessoaFisica;
	
	private String matricula;
	private Date dtAdmissao;
	private Integer turno;
	private String usuario;
	private String senha;
	
	public Funcionario(){}

	public Funcionario(Integer cdPessoaFisica, String matricula, Date dtAdmissao,
			Integer turno, String usuario, String senha) {
		this.cdPessoaFisica = cdPessoaFisica;
		this.matricula = matricula;
		this.dtAdmissao = dtAdmissao;
		this.turno = turno;
		this.usuario = usuario;
		this.senha = senha;
	}

	public Funcionario(PessoaFisica pessoaFisica, String matricula,
			Date dtAdmissao, Integer turno, String usuario, String senha) {
		setPessoaFisica(pessoaFisica);
		this.matricula = matricula;
		this.dtAdmissao = dtAdmissao;
		this.turno = turno;
		this.usuario = usuario;
		this.senha = senha;
	}

	public Integer getCdPessoaFisica() {return cdPessoaFisica;}
	public void setCdPessoaFisica(Integer cdPessoaFisica) {this.cdPessoaFisica = cdPessoaFisica;}	
	public PessoaFisica getPessoaFisica() {return pessoaFisica;}
	public void setPessoaFisica(PessoaFisica pessoaFisica) {
		this.pessoaFisica = pessoaFisica;
		this.cdPessoaFisica = pessoaFisica.getCdPessoa();
	}
	public String getMatricula() {return matricula;}
	public void setMatricula(String matricula) {this.matricula = matricula;}
	public Date getDtAdmissao() {return dtAdmissao;}
	public void setDtAdmissao(Date dtAdmissao) {this.dtAdmissao = dtAdmissao;}
	public Integer getTurno() {return turno;}
	public void setTurno(Integer turno) {this.turno = turno;}
	public String getUsuario() {return usuario;}
	public void setUsuario(String usuario) {this.usuario = usuario;}
	public String getSenha() {return senha;}
	public void setSenha(String senha) {this.senha = senha;}

	@Override
	public boolean equals(final Object other) {
		if (this == other)
			return true;
		if (!(other instanceof Funcionario))
			return false;
		Funcionario castOther = (Funcionario) other;
		return new EqualsBuilder()
				.append(cdPessoaFisica, castOther.cdPessoaFisica)
				//.append(pessoaFisica, castOther.pessoaFisica)  transient field
				.append(matricula, castOther.matricula)
				.append(dtAdmissao,	castOther.dtAdmissao)
				.append(turno, castOther.turno)
				.append(usuario, castOther.usuario)
				.append(senha, castOther.senha).isEquals();
	}

	@Override
	public int hashCode() {
		return new HashCodeBuilder()
				.append(cdPessoaFisica)
				//.append(pessoaFisica)  transient field
				.append(matricula)
				.append(dtAdmissao)
				.append(turno)
				.append(usuario)
				.append(senha).toHashCode();
	}

	@Override
	public String toString() {
		return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
				.appendSuper(super.toString())
				.append("cdPessoaFisica", cdPessoaFisica)
				.append("matricula", matricula)
				.append("dtAdmissao", dtAdmissao)
				.append("turno", turno)
				.append("usuario", usuario)
				.append("senha", senha).toString();
	}
	
}
